package com.wll.design.原型;

import java.util.HashMap;
import java.util.Map;

/**
 * @author ：wanglulu
 * @date ： 2021/11/12 17:48
 * @description：原型模式
 * @version: 1.0
 */
public class MybatisUtils {

    /**
     * 缓存User
     */
    private Map<String, User> mapCache = new HashMap<String, User>();

    /**
     * 获取用户信息
     *
     * @param name
     * @return
     */
    public User getUser(String name) throws Exception {
        User user = null;
        // 缓存中存在
        if (mapCache.containsKey(name)) {
            user = mapCache.get(name);
            System.out.println("从缓存中获取::" + user.toString());
        } else {
            //缓存不存在 查询数据库
            user = findUserByDb(name);
            System.out.println("从数据库中获取：：：" + user.toString());
        }
        // 返回克隆数据
        user = (User) user.clone();
        return user;
    }

    /**
     * 模拟数据库查询
     *
     * @param name
     * @return
     */
    private User findUserByDb(String name) throws CloneNotSupportedException {
        System.out.println("从数据库查询");
        User user = new User();
        user.setName(name);
        user.setAddress("西安");
        user.setAge(22);
        // 克隆数据 放入 缓存 === 克隆体
        mapCache.put(name, (User) user.clone());
        return user;
    }


}
